home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Just Call Me Internet
/
Just Call Me Internet.iso
/
patches
/
rsrcadd
/
rsrcad_3.s
< prev
Wrap
Text File
|
1990-08-09
|
6KB
|
148 lines
* RS232-Receive Buffer Enhancer (wr) 09.08.1990 by Jrgen Meyer
*
* Vergráert den Empfangsbuffer der RS232-Schnittstelle auf einen vom
* User zu setzenden Wert. Damit wird z.B. der berlauf des Empfangsbuffers
* verhindert, wenn der Sender schneller als der Empfnger ist und kein
* Datenflussprotokoll (CTS/RTS) verwendet wird.
*
* RSRCAD_x.PRG
* |
* +------ Gráe, um die der Buffer erweitert werden soll. Dabei sind
* die Werte von 0 bis 5 mglich :
*
* 0 = 1 KByte
* 1 = 2 KByte
* 2 = 4 KByte
* 3 = 8 KByte
* 4 = 16 KByte
* 5 = 32 KByte
*
* Das Programm kann sowohl im Auto-Ordner als auch direkt gestartet werden.
* Mehrfachige Installation ist nicht mglich.
*
* Assembler : TurboAss
*
OUTPUT 'RSRCAD_3.PRG' ; Default, 8 KByte
TEXT
start: lea stack(PC),SP ; Stack einrichten
clr.w -(SP) ; Zeiger auf IOREC fr RS232-
move.w #14,-(SP) ; Eingabe holen
trap #14
addq.l #4,SP
move.l D0,iorec ; Pointer sichern
movea.l D0,A0 ; Wurde der Empfangs-Buffer bereits
cmpi.w #1024,4(A0) ; vergráert (Normal 256 Bytes) ?
blt.s please_add ; N, kleiner als 1 KByte ...
pea t_already_inst(PC) ; Fehlermeldung ausgeben
out_msg: move.w #9,-(SP)
trap #1
addq.l #6,SP
move.w #7,-(SP) ; Auf Tastendruck warten
trap #1
clr.w -(SP) ; Programm beenden
trap #1
please_add: clr.w -(SP) ; Im Auto-Ordner suchen
pea s_name_auto(PC)
move.w #$4E,-(SP)
trap #1
addq.l #8,SP
tst.w D0
bpl.s direct_exec ; Ok, gefunden
clr.w -(SP) ; Im aktuellen Pfad suchen
pea s_name(PC)
move.w #$4E,-(SP)
trap #1
addq.l #8,SP
tst.w D0
bpl.s direct_exec ; Ok, gefunden
pea t_fail(PC) ; Fehler bei FSFIRST
bra.s out_msg ; Msg. ausgeben
direct_exec: move.w #$2F,-(SP) ; Adresse der DTA ermitteln
trap #1
addq.l #2,SP
movea.l D0,A0 ; Zeiger auf "x" im Filenamen
move.b 37(A0),D0 ; (siehe obige Definition)
cmpi.b #'0',D0 ; Kleiner ASCII 0 ?
blt.s default ; Jop, Default ( = 32 KByte )
cmpi.b #'5',D0 ; Gráer ASCII 5 ?
bgt.s default ; Default ...
sub.w #'0',D0 ; ASCII 0 ($30) subtrahieren
bra.s get_values
default: move.w #3,D0 ; Default-Wert (3 fr 8 KByte)
get_values: add.w D0,D0 ; Wert verdoppeln
andi.l #$1F,D0 ; Evtl. vorhandene Mllbits raus
lea size_tab(PC),A0 ; Adresse der Tabellen
movea.l iorec(PC),A1 ; Pointer auf IOREC fr RS232-Input
lea t_install(PC),A2 ; Pointer auf Installations-Msg.
move.l #buffer,(A1)+ ; Adresse des Buffers ndern
move.w 0(A0,D0.w),size ; Wort (Gráe) sichern
move.w 0(A0,D0.w),(A1)+ ; ... und in IOREC eintragen
clr.l (A1)+ ; Head & Tail-Index auf 0 setzen
move.w 12(A0,D0.w),(A1)+ ; Wert fr "Low Water Mark"
move.w 24(A0,D0.w),(A1)+ ; Wert fr "High Water Mark"
move.w 36(A0,D0.w),(A2) ; ASCII-Ausgabe der Gráe
move.l A2,-(SP) ; Installations-Meldung ausgeben
move.w #9,-(SP)
trap #1
addq.l #6,SP
moveq #0,D0 ; D0 lschen
move.w size(PC),D0 ; Gráe des Buffers plus
add.l #ende-start+$0200,D0 ; Gráe des Programmes plus $200
clr.w -(SP) ; Kein Fehler
move.l D0,-(SP) ; Lnge des zu sichernden Bereiches
move.w #$31,-(SP) ; Keep Process
trap #1 ; ... und ab in's Nirwana ...
DATA
iorec: DC.L 0 ; Buffer fr IOREC-Pointer
size: DC.W 0 ; Buffer fr Gráe
size_tab: DC.W $0400,$0800,$1000,$2000,$4000,$8000 ; Gráe
DC.W $0200,$0400,$0800,$1000,$2000,$4000 ; Low Water Mark
DC.W $0300,$0600,$0C00,$1800,$3000,$6000 ; High Water Mark
DC.W " 1"," 2"," 4"," 8","16","32" ; ASCII - Gráe
t_install: DC.B "xx KByte for RS-232 Receive Buffer installed.",13,10,10,0
t_already_inst: DC.B 27,69,10," The RS232-Receive Buffer is already"
DC.B " enhanced !",13,10,10," Press any key ...",13,10,7,0
t_fail: DC.B 27,69,10," Can't find RSRCAD_*.PRG !",13,10,10
DC.B " Press any key ...",13,10,7,0
s_name: DC.B "RSRCAD_*.PRG",0 ; Suchstrings fr FSFIRST
s_name_auto: DC.B "\AUTO\RSRCAD_*.PRG",0
EVEN
BSS
ende:
buffer: DS.W 512
stack: END